package com.example.ViewPagerSum.util;

import android.os.Build;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.zip.GZIPInputStream;

/**
 * ============================================================
 * author：     王景
 * <p/>
 * time：       2015/9/22  14:11.
 * <p/>
 * email:     wjontheway@163.com
 * <p/>
 * description： Http静态工作类
 * 支持get、post、put、delete请求方式
 * <p/>
 * ============================================================
 */
public final class HttpUtils {

    private static final int TIMEOUT_CONNECT = 5000;
    private static final int TIMEOUT_READ = 20000;
    //比如小米手机ting_4.1.7(MI@,Andrid17)
    //    设置User-Agent字段"ting_4.1.7(手机型号，AndroidAPILevel)"
    public static final String USER_AGENT = "ting_4.1.7(" + Build.MODEL + ", Android" + Build.VERSION.SDK_INT + ")";
    private HttpUtils() {
    }

    /**
     * 实现HttpURLConnection的简单的GET请求
     *
     * @param urlStr
     * @return
     */
    public static byte[] doGet(String urlStr) {
        byte[] ret = null;
        if (urlStr != null) {
            //TODO  加载网络数据
            HttpURLConnection conn = null;
            InputStream inputStream = null;
            try {
                URL url = new URL(urlStr);
                conn = (HttpURLConnection) url.openConnection();
                //设置请求方法
                conn.setRequestMethod("GET");
                setCommmerHttpHeaders(conn);
                conn.connect();
                int responseCode = conn.getResponseCode();
                if (responseCode == HttpURLConnection.HTTP_OK) {
                    //响应部分
                    inputStream = conn.getInputStream();
                    //1、检查内容是否经过压缩
                    String encoding = conn.getContentEncoding();
                    //如果压缩，需要解压缩
                    if ("gzip".equals(encoding)) {
                        inputStream = new GZIPInputStream(inputStream);
                    }
                    ret = StreamUtil.readStream(inputStream);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                StreamUtil.close(inputStream);
                inputStream = null;
                StreamUtil.close(conn);
                conn = null;
            }
        }
        return ret;
    }

    /**
     * 实现HttpURLConnection的简单的POST请求
     *
     * @param urlStr
     * @param params 用于提交数据，只能够提交key=value&key=value的形式
     * @return
     */
    public byte[] doPost(String urlStr, HashMap<String, String> params) {
        byte[] ret = null;
        if (urlStr != null) {
            //TODO  加载网络数据
        }
        return ret;
    }


    /**
     * 实现HttpURLConnection的简单的DETELE请求
     *
     * @param urlStr
     * @return
     */
    public static byte[] doDelete(String urlStr) {
        byte[] ret = null;
        if (urlStr != null) {
            //TODO  加载网络数据
        }
        return ret;
    }

    /**
     * 实现HttpURLConnection的简单的PUT请求
     *
     * @param urlStr
     * @param params 用于提交数据，只能够提交key=value&key=value的形式
     * @return
     */
    public byte[] doPut(String urlStr, HashMap<String, String> params) {
        byte[] ret = null;
        if (urlStr != null) {
            //TODO  加载网络数据
        }
        return ret;
    }

    /**
     * 设置通用的Http请求信息:超时和请求头
     *
     * @param conn
     */
    private static void setCommmerHttpHeaders(HttpURLConnection conn) {

        conn.setConnectTimeout(TIMEOUT_CONNECT);
        conn.setReadTimeout(TIMEOUT_READ);
//                设置请求字段部分（HTTP请求头信息）
//                设置User-Agent字段"ting_4.1.7(手机型号，AndroidAPILevel)"
//                听书服务器用这个字段，判断是否是正常软件的请求；(快捷键 ctrl+alt+c提取成常量)
        conn.setRequestProperty("User-Agent", USER_AGENT);
//                代表客户端能够接受服务器传回什么内容类型的格式
        conn.setRequestProperty("Accept", "application/json,application/*,image/*,*/*");
//                设置客户端支持的压缩格式（内容编码 对应服务器返回的字段 Content-Encoding）
        conn.setRequestProperty("Accept-Encoding", "gzip");
    }
}
